<?php

class reservation_model extends CI_Model
{

//TOTDO validera data som ska skickas in i databasen
function CreateReservation($userID, $carID, $startTime, $endTime, $totalPrice, $discountId)
{
	
		$this->load->helper(array('string','date'));
	
		$sqlCommand='select * FROM kund WHERE id = ?';
		
		$query=$this->db->query($sqlCommand,array($userID));
		
		$sqlCommand2='select modell FROM bil WHERE id = ?';
		
		$query2=$this->db->query($sqlCommand2,array($carID));
		
		
		
		// Kollar så att annvändaren och bilen finns i databasen
		if ($query->num_rows() == 1 && $query2->num_rows() == 1)
		{
	
			$ReservationAvaliable = $this->CheckIfAvaliable($carID, $startTime, $endTime);
			
			if ($ReservationAvaliable == TRUE)
			{
					//skapar ocrnummer
					$kundInfo=$query->row_array();
					$personNummer=$kundInfo['Personnummer'];
					$ocrInfo=CreateOCR($personNummer);
					
					//Registerar bokningen i databasen
					$sqlCommand='INSERT INTO bokning (KundID, BilID, RabattID, StartTid, SlutTid, totalPrice,ocrNummer,skapad,ForFalloDatum) VALUES ( ?, ?, ?, ?, ?, ?,?,?,?)';
			
					$query=$this->db->query($sqlCommand,array($userID, $carID, $discountId, $startTime, $endTime, $totalPrice,$ocrInfo['ocrNummer'],$ocrInfo['tid'],$ocrInfo['forFallo']));
	
				if($query != NULL || $query != 0)
				{
					
					
						//Hämtar mailen för annvändaren som bokar
						$sqlCommandEmail='select * FROM kund WHERE id = ?';
			
						$queryEmail=$this->db->query($sqlCommandEmail,array($userID));
						
						//Hämtar ut emailen från queryn
						if ($queryEmail->num_rows() > 0)
						{
						   $row = $queryEmail->row_array();
						
						   $ReservationUserMail = $row['Email'];
						   
						} 
												
						
					//Skapar ett mail som ska skickas till kunden som konfirmation på bokningen
				    $emailConfig=array('newline'=>'\r\n','mailtype'=>'html');
					//HÄmtar bil information
					$this->load->model('Car_model');
					$carInfo=$this->Car_model->GetCarInfo($carID);
	
					$emailData=array('DateStart'=>$startTime,
									'DateEnd'=>$endTime,
									'carInfo'=>$carInfo,
									'ocrNumber'=>$ocrInfo['ocrNummer'],
									'lastPayDay'=>$ocrInfo['forFallo'],
									'totalPrice'=>$totalPrice);
					
							
					$this->load->library('email');
					$this->email->initialize($emailConfig);
					$this->email->from('Studentbilar@gmail.com', 'Studentbilar.se');
					$this->email->to($ReservationUserMail);
					$this->email->subject('Bokning genomförd' );
					$this->email->message($this->load->view('email/view_email_reservation',$emailData,TRUE));
					$this->email->send();
								
					//Kod för sidan som ska öppnas?
					
					
						return TRUE;
						
				}
				
				else
				{
					return FALSE;
				}
			}
	
		}

			
		
		
		else
		{
			
			return FALSE;
		}
	
}



function CheckIfAvaliable($carID, $startTime, $endTime)
{
		//Hämtar dagens datum i unix
		$todaysDateUnix = Now();
		//Omvandlar det till "human" datum
		$todaysDate = unix_to_human($todaysDateUnix);
	
	
		$sqlGetReservations = 'select * FROM bokning WHERE BilID = ? AND SlutTid >= ?';
		
		$reservations = $this->db->query($sqlGetReservations, array($carID, $todaysDate));
	
	
		//Konverterar till unix timestamp
		$unixStartTime = human_to_unix($startTime);
		$unixEndTime = human_to_unix($endTime);
		
		foreach ($reservations->result() as $row)
		{
		   
		    
			
			
			
			$dbStartTime = human_to_unix($row->StartTid);
			$dbEndTime = human_to_unix($row->SlutTid);
				
				
		
		
		   //Kollar så det inte redan finns en bokning under den efterfrågade bokningens tid
		   for($i = $unixStartTime; $i <= $unixEndTime; $i++)
		   {
		   	
		
			 
			 if($i >= $dbStartTime && $i <= $dbEndTime)
			 {		
			 	//false
			 	return FALSE;
				
			 }
			 
			 
		   }
		   //true
		
		
		}
		return TRUE;

}	





}